// axios封装
import axios from "axios";
// 创建axios实例
const serviceRequset = axios.create({
  // 设置超时时间
  timeout: 10000,
  // 设置请求的基本路径
  baseURL: process.env.VUE_APP_API_ROOT,
  headers: {
    "Content-Type": "application/json;charset=UTF-8",
  },
});

/**
 * 请求前拦截
 * 用于处理需要在请求前的操作
 *  */
serviceRequset.interceptors.request.use(
  (config) => {
    // 请求成功
    const token =
      // '02d1a659-095e-4fc5-8a54-986ac66f0733';
      localStorage.getItem("token");
    // 根据接口是否需要token登陆验证决定是否保留
    if (token) {
      config.headers.Authorization = "Bearer " + token;
      config.headers.AuthorizationType = "dotnet";
      // config.headers.Authorization =  token;
    }

    return config;
  },
  (err) => {
    // 请求失败,返回错误信息
    // console.log(err)
    return Promise.reject(err);
  }
);

// 响应后拦截
serviceRequset.interceptors.response.use(
  (response) => {
    // 根据实际情况定义变量值
    const responseCode = response.status;
    // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据
    // 否则的话抛出错误
    if (responseCode === 200) {
      // 两种写法貌似皆可（待验证）
      // 1、 return response
      // if (response.data.code == 401) {
      //   //认证失败

      //   var VIRTUAL_PATH = process.env.VUE_APP_VIRTUAL_PATH;
      //   window.location.href =
      //     window.location.origin + `${VIRTUAL_PATH}/login?isExit=true`;
      //   return Promise.reject(err);
      // }
      return Promise.resolve(response.data);
    } else {
      console.log(response);
      return Promise.reject(response.data);
    }
  },
  (err) => {
    // 断网或者请求超时状态
    if (!err.response) {
      // 请求超时
      if (err.message.include("timeout")) {
        console.log("请求超时");
      } else {
        console.log("断网了");
      }
    }
    // 服务器返回不是2开头的情况，则进入失败情况判断
    // 根据接口返回的错误状态码进行不同的错误情况处理
    console.log(err);
    // 根据实际情况定义变量值
    const responseCode = err.response.status;
    switch (responseCode) {
      // 401：未登录
      case 401:
        // 跳转到登陆页
        // console.log(window.location);
        // localStorage.clear();
        // var VIRTUAL_PATH = process.env.VUE_APP_VIRTUAL_PATH;
        // window.location.href = window.location.origin + `${VIRTUAL_PATH}/login`;
        // var VIRTUAL_PATH = process.env.VUE_APP_VIRTUAL_PATH;
        // this.$router.push(`${VIRTUAL_PATH}/login`);
        // var config = JSON.parse(localStorage.getItem("config"))
        // axios({
        //   baseURL: config.tyrz,
        //   method: "POST",
        //   url: "/Account/LoginOut",
        //   data: {
        //     clientId: "tyrz",
        //     token: localStorage.getItem("token")
        //   },
        //   withCredentials: false
        // }).then(res => {
        //   localStorage.clear();
        //   window.location.href = res.data.data + "/?isExit=true";

        // })
        //   .catch(res => {
        //     alert(res.msg);
        //   });

        break;
      // 404：请求不存在
      case 404:
        // 提示网页不存在
        break;
      default:
        // 其他错误，直接抛出错误提示
        break;
    }
    // 抛出错误
    return Promise.reject(err);
  }
);

export default serviceRequset;
